﻿// 184. 虫食算.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

/*
https://www.acwing.com/problem/content/186/

所谓虫食算，就是原先的算式中有一部分被虫子啃掉了，需要我们根据剩下的数字来判定被啃掉的字母。

来看一个简单的例子：

 43#9865#045
+  8468#6633
--------------
 44445506978
其中 # 号代表被虫子啃掉的数字。

根据算式，我们很容易判断：第一行的两个数字分别是 5 和 3，第二行的数字是 5。

现在，我们对问题做两个限制：

首先，我们只考虑加法的虫食算。这里的加法是 N 进制加法，算式中三个数都有 N 位，允许有前导的 0。

其次，虫子把所有的数都啃光了，我们只知道哪些数字是相同的，我们将相同的数字用相同的字母表示，不同的数字用不同的字母表示。

如果这个算式是 N 进制的，我们就取英文字母表的前 N 个大写字母来表示这个算式中的 0 到 N−1 这 N 个不同的数字：但是这 N 个字母并不一定顺序地代表 0 到 N−1。

输入数据保证 N 个字母分别至少出现一次。

   BADC
+  CBDA
----------
   DCCC
上面的算式是一个 4 进制的算式。

很显然，我们只要让 ABCD 分别代表 0123，便可以让这个式子成立了。

你的任务是，对于给定的 N 进制加法算式，求出 N 个不同的字母分别代表的数字，使得该加法算式成立。

输入数据保证有且仅有一组解。

输入格式
输入包含 4 行。

第一行有一个正整数 N(N≤26)，后面的 3 行每行有一个由大写字母组成的字符串，分别代表两个加数以及和。

这 3 个字符串左右两端都没有空格，并且恰好有 N 位。

输出格式
输出包含一行。

在这一行中，应当包含唯一的那组解。

解是这样表示的：输出 N 个数字，分别表示 A，B，C…… 所代表的数字，相邻的两个数字用一个空格隔开，不能有多余的空格。

输入样例：
5
ABCED
BDACE
EBBAA
输出样例：
1 0 3 4 2
*/


int main()
{
    std::cout << "Hello World!\n";
}

 